#!/bin/sh -e

kinstall() {
    # usage: kisntall 755 filename /usr/bin/file
    mkdir -p "${3%/*}"; cp "$2" "$3"
    chmod "$1" "$3"
}

for patch in patches/*.patch; do
    patch -p1 < "$patch"
done

# Build and install regular busybox.
# This excludes utilities which require 'suid' to function.
make CC="${CC:=gcc}"
make CONFIG_PREFIX="$1/usr" install

# Rename the binary temporarily.
mv "$1/usr/bin/busybox" "$1/usr/bin/busybox-nosuid"

# Build and install recovery busybox.
# The only difference of this configuration is that it includes a recovery
# shell.
clsed '/SH_STANDALONE/cCONFIG_FEATURE_SH_STANDALONE=y' .config

# Create an embedded script for recovery sh
mkdir embed

# We are not trying to expand here.
# shellcheck disable=SC2016
printf '[ "$SHLVL" -gt 20 ] && exit 1; exec -a ash "$0" "$@"\n' > embed/rcsh
chmod +x embed/rcsh

make CC="$CC"
make CONFIG_PREFIX="$1/usr" install
mv "$1/usr/bin/busybox" "$1/usr/bin/rcsh"

# Build and install suid busybox.
# This _only_ includes utlities which require 'suid' to function.
cp -f .config-suid .config
make CC="${CC:-gcc}"
make CONFIG_PREFIX="$1/usr" install

# Aptly name the busybox binaries.
mv "$1/usr/bin/busybox"        "$1/usr/bin/busybox-suid"
mv "$1/usr/bin/busybox-nosuid" "$1/usr/bin/busybox"

# Install the non-suid symlinks.
"$1/usr/bin/busybox" --list | while read -r bin; do
    ln -s busybox "$1/usr/bin/$bin"
done

# Install the suid symlinks.
"$1/usr/bin/busybox-suid" --list | while read -r bin; do
    ln -s busybox-suid "$1/usr/bin/$bin"
done

# Set suid on busybox suid.
chmod u+s "$1/usr/bin/busybox-suid"

# Install runit and sysmgr services.
clsv -d "$1" crond.run mdev.run ntpd.run syslogd.run acpid.run

# Install configurations for ntp, init, and mdev.
kinstall 644 ntp.conf  "$1/etc/ntp.conf"
kinstall 644 inittab   "$1/etc/inittab"
kinstall 644 mdev.conf "$1/etc/mdev.conf"

# Install udhcpc configuration script.
kinstall 755 udhcpc.script "$1/etc/udhcpc"
